# 函数递归 其实就是一个函数，自己调用自己~

# 写一个函数来求n的阶乘（n是正整数）

def factor1(n):
    result = 1
    for i in range(1, n+1):
        result *= i
    return result


print(factor1(5))

# 递归两要素：1、递归结束条件  2、递归的递推公式
# 递归缺点：1、执行过程非常复杂，难以理解，2、递归代码容易出现栈溢出的情况 3、通常循环的版本运行速度要比递归的版本有优势（函数调用也是有开销的）
# 递归的优点：代码非常简洁！尤其是处理一些“问题本身就是通过递归的方式定义的”比如数据结构中的二叉树


def factor2(n):
    if n == 1:
        return 1
    return n * factor2(n-1)


print(factor2(5))




